//#pragma comment(linker, "/STACK:16777216")
#include <cstdio>
#include <cstring>
#include <map>
#include <queue>
#include <iostream>
using namespace std;
typedef struct ppp{
	int a, b;
}par;
par p[200080];
bool ok, mark[200080];
map< int, int > m;
int n, c, x, y, a, b, i, j, k, t, s;

int main(){
	//freopen("in.txt", "r", stdin);
	scanf("%d%d", &n, &c);
	while(n+c){
		m.clear();
		memset(p, 0, sizeof(p));
		ok=1;
		t=1;
		for(i=0;i<c;++i){
			scanf("%d%d", &a, &b);
			if(ok){
				j=m[a];
				k=m[b];
				if(!j)j=m[a]=t++;
				if(!k)k=m[b]=t++;
				if(p[j].a){
					if(p[j].b && !(p[j].a == k || p[j].b ==k))
						ok=0;
					else if(p[j].a!=k)p[j].b=k;
				}
				else p[j].a=k;
				if(p[k].a){
					if(p[k].b && !(p[k].a == j || p[k].b ==j))
						ok=0;
					else if(p[k].a!=j)p[k].b=j;
				}
				else p[k].a=j;
			}
		}
		if(ok){
			memset(mark, 1, sizeof(mark));
			for(i=1;i<t&&ok;++i){
				s=0;
				if(mark[i]){
					mark[i]=0;
					++s;
					x=i;
					y=p[a].a;
					while(y&&ok){
						if(mark[y]){
							mark[y]=0;
							++s;
							if(p[y].b==x){
								a=y;
								y=p[y].a;
								x=a;
							}else{
								a=y;
								y=p[y].b;
								x=a;
							}
						}
						else ok=0;
					}
					
					x=i;
					y=p[a].b;
					while(y&&ok){
						if(mark[y]){
							mark[y]=0;
							++s;
							if(p[y].b==x){
								a=y;
								y=p[y].a;
								x=a;
							}else{
								a=y;
								y=p[y].b;
								x=a;
							}
						}
						else ok=0;
					}
				}
			}
			if(ok||(!ok&&s==n))printf("Y\n");
			else printf("N\n");
		}
		else printf("N\n");
		
		scanf("%d%d", &n, &c);
	}
	return 0;
}
